package com.apps.smodule.generate.DevFastTemplate;

import com.apps.sexctption.NullException;
import com.apps.stoolkit.FileToolkit;
import com.apps.sutils.StringUtils;

import java.io.FileNotFoundException;

/**
 * 生成对象和对象注解
 */
public class sGenerateObject
{
    /**
     * 项目路径
     */
    private String projectPath="";
    /**
     * 包名
     */
    private String Package="";
    /**
     * 输出目录
     */
    private String OutputDir="";

    /**
     * 对象的名称
     */
    private String ObjectName="";
    /**
     * 注解的名称
     */
    private String AnnotationName="";


    public String getPackage()
    {
        return Package;
    }

    public void setPackage(String aPackage)
    {
        Package = aPackage;
    }

    public String getObjectName()
    {
        return ObjectName;
    }

    public void setObjectName(String objectName)
    {
        ObjectName = objectName;
    }

    public String getProjectPath() {
        return projectPath;
    }

    public void setProjectPath(String projectPath) {
        this.projectPath = projectPath;
    }

    public String getOutputDir() {
        return OutputDir;
    }

    public void setOutputDir(String outputDir) {
        OutputDir = outputDir;
    }

    /**
     * 生成代码文件
     */
    public  void Generate()
    {
        if(StringUtils.isEmpty(projectPath))
            throw new NullException("请设置项目路径");
        if(StringUtils.isEmpty(Package))
            throw new NullException("请设置包名");
        if(StringUtils.isEmpty(ObjectName))
            throw new NullException("请设置对象名称");
        if(StringUtils.isEmpty(OutputDir))
            throw new NullException("请设置输出路径");
        AnnotationName = ObjectName+"Id";
        //先生成模板文件
        String context=ObjectTemplateProcessor(FileToolkit.ReadResourceFile("static/template/TemplateObject.java"));

        String package_path="\\"+Package.replace(".","\\");
        String fileName="s"+ObjectName+".java";
        String out_path=projectPath+OutputDir+package_path;
        FileToolkit.WriteFile(out_path,fileName,context);
        //生成注解文件
        context = AnnotationTemplateProcessor(FileToolkit.ReadResourceFile("static/template/TemplateAnnotation.java"));
        fileName=AnnotationName+".java";
        out_path=projectPath+OutputDir+package_path+"\\annotation";
        FileToolkit.WriteFile(out_path,fileName,context);
    }

    /**
     * 类文件处理器
     * @param context
     * @return
     */
    protected String ObjectTemplateProcessor(String context)
    {
        if(StringUtils.isEmpty(context))
            throw new NullException("模板内容不能为空");
        if(StringUtils.isEmpty(AnnotationName))
            throw new NullException("注解名称不能为空");
        context = context.replaceAll("sPackage",Package);
        context = context.replaceAll("sAnnotation",Package+".annotation."+AnnotationName);
        context = context.replaceAll("ClassName","s"+ObjectName);
        context = context.replaceAll("sParams",ObjectName.toLowerCase());
        context = context.replaceAll("AnnotationName",AnnotationName);
        return context;
    }

    /**
     * 处理注解模板
     * @param context
     * @return
     */
    protected String AnnotationTemplateProcessor(String context)
    {
        if(StringUtils.isEmpty(context))
            throw new NullException("模板内容不能为空");
        if(StringUtils.isEmpty(AnnotationName))
            throw new NullException("注解名称不能为空");
        context =  context.replaceAll("sPackage",Package+".annotation");
        context = context.replaceAll("AnnotationName",AnnotationName);
        return context;
    }

    public static void main(String... args) throws FileNotFoundException
    {
        //生成演示
        sGenerateObject generateObject=new sGenerateObject();
        generateObject.setProjectPath("E:\\java-workspace\\spider-toolkit\\spider_study");
        generateObject.setOutputDir("\\src\\main\\java");
        generateObject.setPackage("com.app.module.core");
        generateObject.setObjectName("Friend");
        //生成文件

        generateObject.Generate();
    }

}
